package com.blog4j.api.client;

import com.blog4j.api.config.FeignRequestInterceptor;
import com.blog4j.api.vo.NoticeEmailVo;
import com.blog4j.common.model.LogVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author 98k灬
 * @version v1.0.0
 * @Description : 功能描述
 * @Create on : 2024/8/14 13:31
 **/
@FeignClient(value = "blog4j-server",
        path = "/feign",
        configuration = FeignRequestInterceptor.class)
public interface FeignServer {
    /**
     * 发送邮件给文章审批人
     *
     * @param emailVo 邮件信息
     */
    @PostMapping("/sendSystemEmailToArticleApproveUser")
    void sendSystemEmailToArticleApproveUser(@RequestBody NoticeEmailVo emailVo);

    /**
     * 发送邮件给文章创建者
     *
     * @param toEmail 接收方邮箱地址
     * @param articleTitle 文章标题
     */
    @PostMapping("/sendSystemEmailToArticleCreater")
    void sendSystemEmailToArticleCreater(@RequestParam("toEmail") String toEmail,
                                         @RequestParam("articleTitle") String articleTitle);

    /**
     * 给组织管理员发送邮件
     *
     * @param emailVo 邮件信息
     */
    @PostMapping("/sendSystemEmailToOrganizationAdmin")
    void sendSystemEmailToOrganizationAdmin(@RequestBody NoticeEmailVo emailVo);

    /**
     * 用户申请加入组织，审批后，给用户发送邮件通知
     *
     * @param toEmail 用户邮箱地址
     * @param organizationName 组织名称
     */
    @PostMapping("/sendEmailToUser")
    void sendEmailToUser(@RequestParam("toEmail") String toEmail,
                         @RequestParam("organizationName") String organizationName);

    /**
     * 给超级管理员发送审批组织的邮件
     *
     * @param emailVo 邮件信息
     */
    @PostMapping("/sendSystemEmailToSuperAdmin")
    void sendSystemEmailToSuperAdmin(@RequestBody NoticeEmailVo emailVo);

    /**
     * 用户申请创建组织 审批后 给用户发送邮件
     *
     * @param toEmail 用户邮箱地址
     * @param organizationName 组织名称
     */
    @PostMapping("/sendEmailToUserForApproveOrganization")
    void sendEmailToUserForApproveOrganization(@RequestParam("toEmail") String toEmail,
                         @RequestParam("organizationName") String organizationName);

    /**
     * 添加日志
     *
     * @param logVo 日志信息
     */
    @PostMapping("/addLog")
    void addLog(@RequestBody LogVo logVo);
}
